 /*******************************************************************************
  * Copyright (c) 2004, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.ui.internal.intro.impl.util;

 import java.net.URL ;

 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.ImageRegistry;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.internal.intro.impl.IIntroConstants;
 import org.eclipse.ui.internal.intro.impl.IntroPlugin;
 import org.osgi.framework.Bundle;

 /**
  * Convenience class for Images.
  */
 public final class ImageUtil {

     /**
      * Image keys, to be used by plugin (intro) registry.
      */
     // Default images
 public static final String DEFAULT_ROOT_LINK = "rootLink"; //$NON-NLS-1$
 public static final String DEFAULT_SMALL_ROOT_LINK = "rootLinkSmall"; //$NON-NLS-1$
 public static final String DEFAULT_FORM_BG = "formBg"; //$NON-NLS-1$
 public static final String DEFAULT_LINK = "link"; //$NON-NLS-1$

     // Standby images
 public static final String BACK = "back"; //$NON-NLS-1$
 public static final String HELP_TOPIC = "helpTopic"; //$NON-NLS-1$

     // Launch bar image
 public static final String RESTORE_WELCOME = "restoreWelcome"; //$NON-NLS-1$

     // Viewer images
 public static final String INTRO_MODEL_LEAF = "leaf"; //$NON-NLS-1$
 public static final String INTRO_MODEL_CONTAINER = "container"; //$NON-NLS-1$
 public static final String OPEN_ITNRO_VIEW = "introView"; //$NON-NLS-1$

     public static final String CONFIG_EXTENSION = "configExtension";//$NON-NLS-1$

     // Image location
 public static final String ICONS_PATH = "$nl$/icons/"; //$NON-NLS-1$

     /**
      * Convenience method to create an image descriptor from the Intro plugin.
      *
      * Method assumes that images are under the "icons" directory, so don't
      * append that directory name for "imageName".
      */
     public static ImageDescriptor createImageDescriptor(String imageName) {
         return createImageDescriptor(Platform
             .getBundle(IIntroConstants.PLUGIN_ID), ICONS_PATH + imageName);
     }
     
     /**
      * Convenience method to create an image descriptor.
      *
      */
     public static ImageDescriptor createImageDescriptor(Bundle bundle,
             String imageName) {
         try {
             URL imageUrl = FileLocator.find(bundle, new Path(imageName), null);
             if (imageUrl != null) {
                 ImageDescriptor desc = ImageDescriptor.createFromURL(imageUrl);
                 return desc;
             }
         } catch (Exception e) {
             // Should never be here.
 Log.error("could not create Image Descriptor", e); //$NON-NLS-1$
 }
         Log.warning("could not create Image Descriptor for: " + imageName //$NON-NLS-1$
 + " in bundle: " + bundle.getSymbolicName()); //$NON-NLS-1$
 return ImageDescriptor.getMissingImageDescriptor();
     }
     
     /**
      * Convenience method to create an image descriptor.
      *
      */
     public static ImageDescriptor createImageDescriptor(IPath base,
             String imageName) {
         try {
             URL imageUrl = new URL (base.append(imageName).toOSString());
             if (imageUrl != null) {
                 ImageDescriptor desc = ImageDescriptor.createFromURL(imageUrl);
                 return desc;
             }
         } catch (Exception e) {
             // Should never be here.
 Log.error("could not create Image Descriptor", e); //$NON-NLS-1$
 }
         Log.warning("could not create Image Descriptor for: " + imageName); //$NON-NLS-1$
 return ImageDescriptor.getMissingImageDescriptor();
     }

     /**
      * Convenience method to create an image from the Intro plugin.
      *
      * Method assumes that images are under the "icons" directory, so don't
      * append that directory name for "imageName".
      */
     public static Image createImage(String imageName) {
         try {
             ImageDescriptor imageDsc = createImageDescriptor(imageName);
             return imageDsc.createImage();
         } catch (Exception e) {
             // Should never be here.
 Log.error("could not create Image", e); //$NON-NLS-1$
 return ImageDescriptor.getMissingImageDescriptor().createImage();
         }
     }

     /**
      * Util method for image re-use in Intro Plugin.
      *
      * @param key
      * @return
      */
     public static Image getImage(String key) {
         // INTRO: Image registry should not have the same life span
 // as the intro plug-in. It should be disposed when
 // presentation is disposed, otherwise images will
 // stay around once Inro has been loaded.
 return IntroPlugin.getDefault().getVolatileImageRegistry().get(key);
     }

     public static boolean hasImage(String key) {
         ImageRegistry registry = IntroPlugin.getDefault().getVolatileImageRegistry();
         return (registry.getDescriptor(key) != null);
     }

     /**
      * Register an image descriptor in the Intro Plugin image registry. Has no
      * effect if the key has already been registered.
      *
      * @param key
      * @param imageName
      */
     public static void registerImage(String key, String imageName) {
         ImageRegistry registry = IntroPlugin.getDefault().getVolatileImageRegistry();
         if (registry.getDescriptor(key) != null)
             // key has already been registered. do nothing.
 return;
         registry.put(key, createImageDescriptor(imageName));
     }

     public static void registerImage(String key, Bundle bundle, String imageName) {

         ImageRegistry registry = IntroPlugin.getDefault().getVolatileImageRegistry();
         if (registry.getDescriptor(key) != null)
             // key has already been registered. do nothing.
 return;
         registry.put(key, createImageDescriptor(bundle, imageName));
     }
     
     public static void registerImage(String key, IPath base, String imageName) {
         ImageRegistry registry = IntroPlugin.getDefault().getVolatileImageRegistry();
         if (registry.getDescriptor(key) != null)
             // key has already been registered. do nothing.
 return;
         registry.put(key, createImageDescriptor(base, imageName));
     }
 }

